package com.settlement.system.common.enums;

import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.extern.slf4j.Slf4j;

/**
 * @author author
 */
@Slf4j
public enum WpBillAduitEnum {

    /**
     * 空的构造方法
     */
    WpBillAduitEnum() {

    };

    /**
     * 分类
     */
    @Getter
    @AllArgsConstructor
    public enum CLASSIFY implements ICommonEnum{
        /**
         * 来货差异
         */
        LAIHUO_CHAYI("1","来货差异"),
        /**
         * 退供差异
         */
        TUIGONG_CHAYI("2","退供差异");

        final String no;

        final String name;

        public static String getNoByName(String name) {
            return CommonEnumUtil.getNoByName(CLASSIFY.class, name);
        }

        public static String getNameByNo(String no){
            return CommonEnumUtil.getNameByNo(CLASSIFY.class,no);
        }
    }

    /**
     * 跟进部门
     */
    @Getter
    @AllArgsConstructor
    public enum FOLLOW_UP_DEPT implements ICommonEnum {
        /**
         * 已确认待唯品结算
         */
        T1("1","已确认待唯品结算"),

        /**
         * 未确认待唯品核查
         */
        T2("2","未确认待唯品核查"),

        /**
         * 待物流处理
         */
        T3("3","待物流处理"),

        /**
         * 待门店处理
         */
        T4("4","待门店处理"),

        /**
         * 待地区仓处理
         */
        T5("5","待地区仓处理"),

        /**
         * 待客服处理
         */
        T6("6","待客服处理"),

        /**
         * 待技术处理
         */
        T7("7","待技术处理"),

        /**
         * 待财务调账处理
         */
        T8("8","待财务调账处理"),

        /**
         * 有争议
         */
        T9("9","有争议"),

        /**
         * 无需跟进
         */
        T10("10","无需跟进");

        String no;

        String name;

        public static String getNoByName(String name) {
            return CommonEnumUtil.getNoByName(FOLLOW_UP_DEPT.class,name);
        }

        public static String getNameByNo(String no){
            return CommonEnumUtil.getNameByNo(FOLLOW_UP_DEPT.class,no);
        }

    }

    /**
     * 核查结果
     */
    @Getter
    @AllArgsConstructor
    public enum CHECK_RESULT implements ICommonEnum {
        /**
         * POSKU差异为0
         */
        T1("1","POSKU差异为0"),

        /**
         * 不赔付
         */
        T2("2","不赔付"),

        /**
         * 待核查
         */
        T3("3","待核查"),

        /**
         * 待走流程结算
         */
        T4("4","待走流程结算"),

        /**
         * 待做虚拟单入库
         */
        T5("5","待做虚拟单入库"),

        /**
         * 可赔付
         */
        T6("6","可赔付"),

        /**
         * 唯品会未收到商品
         */
        T7("7","唯品会未收到商品"),

        /**
         * 唯品已退回待仓库验收
         */
        T8("8","唯品已退回待仓库验收"),

        /**
         * 唯品运配索赔
         */
        T9("9","唯品运配索赔"),

        /**
         * 唯品运配责任
         */
        T10("10","唯品运配责任"),

        /**
         * 唯品责任
         */
        T11("11","唯品责任"),

        /**
         * 未发出未验收
         */
        T12("12","未发出未验收"),

        /**
         * 已发出未收到退货
         */
        T13("13","已发出未收到退货"),

        /**
         * 已结算
         */
        T14("14","已结算"),

        /**
         * 已结算丢件
         */
        T15("15","已结算丢件"),

        /**
         * 已拒收
         */
        T16("16","已拒收"),

        /**
         * 已揽收
         */
        T17("17","已揽收"),

        /**
         * 已收到，质检到无头件待处理
         */
        T18("18","已收到，质检到无头件待处理"),

        /**
         * 已验收+索赔=计划量
         */
        T19("19","已验收+索赔=计划量"),

        /**
         * 已验收+索赔量＜计划量
         */
        T20("20","已验收+索赔量＜计划量"),

        /**
         * 已验收+索赔量>计划量
         */
        T21("21","已验收+索赔量>计划量"),

        /**
         * 已质检
         */
        T22("22","已质检"),

        /**
         * 已做虚拟单入库
         */
        T23("23","已做虚拟单入库"),

        /**
         * 疫情未开仓
         */
        T24("24","疫情未开仓"),

        /**
         * 优惠差异
         */
        T25("25","优惠差异"),

        /**
         * 有争议
         */
        T26("26","有争议"),

        /**
         * 整单验收无差异
         */
        T27("27","整单验收无差异"),

        /**
         * 自认损失
         */
        T28("28","自认损失");

        String no;

        String name;

        public static String getNoByName(String name) {
            return CommonEnumUtil.getNoByName(CHECK_RESULT.class,name);
        }

        public static String getNameByNo(String no){
            return CommonEnumUtil.getNameByNo(CHECK_RESULT.class,no);
        }

    }

    /**
     * 责任方
     */
    @Getter
    @AllArgsConstructor
    public enum RESPONSIBLE_PARTY implements ICommonEnum {
        /**
         * O2O门店
         */
        T1("1","O2O门店"),

        /**
         * 仓库
         */
        T2("2","仓库"),

        /**
         * 质检部
         */
        T3("3","质检部"),

        /**
         * 品牌运营
         */
        T4("4","品牌运营"),

        /**
         * 系统/技术
         */
        T5("5","系统/技术"),

        /**
         * 平台
         */
        T6("6","平台"),

        /**
         * 无损失
         */
        T7("7","无损失");

        String no;

        String name;

        public static String getNoByName(String name) {
            return CommonEnumUtil.getNoByName(RESPONSIBLE_PARTY.class,name);
        }

        public static String getNameByNo(String no){
            return CommonEnumUtil.getNameByNo(RESPONSIBLE_PARTY.class,no);
        }
    }

    /**
     * 损失原因
     */
    @Getter
    @AllArgsConstructor
    public enum LOSS_REASON implements ICommonEnum{
        /**
         * 门店漏发
         */
        T1("1","门店漏发"),

        /**
         * 仓库漏发
         */
        T2("2","仓库漏发"),

        /**
         * 超时未质检
         */
        T3("3","超时未质检"),

        /**
         * 质检错误
         */
        T4("4","质检错误"),

        /**
         * 商品描述错误
         */
        T5("5","商品描述错误"),

        /**
         * 商品质量问题
         */
        T6("6","商品质量问题"),

        /**
         * 系统问题
         */
        T7("7","系统问题"),

        /**
         * 平台规则特殊处理
         */
        T8("8","平台规则特殊处理"),

        /**
         * 实物追回
         */
        T9("9","实物追回"),

        /**
         * 货款追回
         */
        T10("10","货款追回");

        String no;

        String name;

        public static String getNoByName(String name) {
            return CommonEnumUtil.getNoByName(LOSS_REASON.class,name);
        }

        public static String getNameByNo(String no){
            return CommonEnumUtil.getNameByNo(LOSS_REASON.class,no);
        }
    }

    public enum DELIVERY_TYPE {
        /**
         * 不区分
         */
        not_distinguish(0, "不区分"),
        /**
         * 仓JITX
         */
        warehouse_jitx(1, "仓JITX"),
        /**
         * 仓JIT
         */
        jit(2, "仓JIT"),
        /**
         * 门店JITX
         */
        shop_jitx(3, "门店JITX");

        public String name;
        public Integer no;

        DELIVERY_TYPE(Integer no, String name) {
            this.name = name;
            this.no = no;
        }

        public String getName() {
            return name;
        }

        public Integer getNo() {
            return no;
        }

        public static Integer getNoByName(String name) {
            DELIVERY_TYPE[] deliveryTypes = values();
            for (int index = 0; index < deliveryTypes.length; index++) {
                if (deliveryTypes[index].getName().equals(name)) {
                    return deliveryTypes[index].getNo();
                }
            }
            return null;
        }


        public static String getNameByNo(Integer no) {
            DELIVERY_TYPE[] deliveryTypes = values();
            for (int index = 0; index < deliveryTypes.length; index++) {
                if (deliveryTypes[index].getNo().equals(no)) {
                    return deliveryTypes[index].getName();
                }
            }
            return null;
        }
    }

    /**
     * WP-来货差异-系统初判
     * 1,无需核查-送货单差异为0;2,无需核查-送货单差异小于0;3,无需核查-已揽收;4,无需核查-已拒收质检;5,待核查-送货单差异大于0;6,待核查-未揽收;
     */
    @Getter
    @AllArgsConstructor
    public enum SYS_INITIAL_JUDGE_IN_COMING implements ICommonEnum {
        /**
         * 已确认待唯品结算
         */
        T1("1","无需核查-送货单差异为0"),

        /**
         * 未确认待唯品核查
         */
        T2("2","无需核查-送货单差异小于0"),

        /**
         * 待物流处理
         */
        T3("3","无需核查-已揽收"),

        /**
         * 待门店处理
         */
        T4("4","无需核查-已拒收质检"),

        /**
         * 待地区仓处理
         */
        T5("5","待核查-送货单差异大于0"),

        /**
         * 待客服处理
         */
        T6("6","待核查-未揽收");

        String no;

        String name;

        public static String getNoByName(String name) {
            return CommonEnumUtil.getNoByName(SYS_INITIAL_JUDGE_IN_COMING.class,name);
        }

        public static String getNameByNo(String no){
            return CommonEnumUtil.getNameByNo(SYS_INITIAL_JUDGE_IN_COMING.class,no);
        }

    }

    /**
     * 系统初判。
     * 1,无需核查-退供单差异数量为0;
     * 2,无需核查-退供单差异数量小于0;
     * 3,待核查-退供单差异数量大于0;
     * 4,无需核查-待结算;
     * 5,待核查;
     * 6,无需核查-退供未收获数量为0;
     */
    @Getter
    @AllArgsConstructor
    public enum SYS_INITIAL_JUDGE_REFUND_DIF implements ICommonEnum {
        /**
         * 已确认待唯品结算
         */
        T1("1","无需核查-退供单差异数量为0"),

        /**
         * 未确认待唯品核查
         */
        T2("2","无需核查-退供单差异数量小于0"),

        /**
         * 待物流处理
         */
        T3("3","待核查-退供单差异数量大于0"),

        /**
         * 待门店处理
         */
        T4("4","无需核查-待结算"),

        /**
         * 待地区仓处理
         */
        T5("5","待核查"),

        /**
         * 待客服处理
         */
        T6("6","无需核查-退供未收获数量为0");

        String no;

        String name;

        public static String getNoByName(String name) {
            return CommonEnumUtil.getNoByName(SYS_INITIAL_JUDGE_REFUND_DIF.class,name);
        }

        public static String getNameByNo(String no){
            return CommonEnumUtil.getNameByNo(SYS_INITIAL_JUDGE_REFUND_DIF.class,no);
        }

    }

    public static void main(String[] args) {
        System.out.println(CLASSIFY.getNameByNo("1"));
        System.out.println(CLASSIFY.getNameByNo("11"));

    }


}
